package com.itheima.streamdemo;

import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;

public class StreamDemo3 {

    public static void main(String[] args) {
        // Stream流提供的常用中间方法
        List<String> list = List.of("张三丰", "张无忌", "赵敏", "周芷若", "张强", "张三丰");
        System.out.println("--------------------");

        // 1. 过滤方法
        list.stream()
                .filter(s -> s.startsWith("张"))
                .filter(s -> s.length() == 3)
                .forEach(System.out::println);
        System.out.println("--------------------");

        // 2. 排序方法
        list.stream()
                .sorted((s1, s2) -> s2.compareTo(s1))
                .forEach(System.out::println);
        System.out.println("--------------------");

        // 3. 映射方法（对元素进行加工，如获取元素长度，并返回为新的流）
        list.stream()
                .map(String::length)
                .forEach(System.out::println);
        System.out.println("--------------------");

        // 4. 跳过方法
        list.stream()
                .skip(2)
                .forEach(System.out::println);
        System.out.println("--------------------");

        // 5. 截取方法
        list.stream()
                .limit(3)
                .forEach(System.out::println);
        System.out.println("--------------------");

        // 6. 去重方法
        list.stream()
                .distinct()
                .forEach(System.out::println);
        System.out.println("--------------------");

        // 7. 合并方法
        List<String> list2 = List.of("张强", "张无忌", "赵敏", "周芷若", "张强", "张三丰");
        List<Integer> list3 = List.of(1, 2, 3, 4, 5, 6);
        Stream<Object> stream = Stream.concat(list2.stream(), list3.stream());
        stream.forEach(System.out::println);
        System.out.println("--------------------");

    }
}
